package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.dto.SeckillActivityDTO;
import com.zenithmind.mall.pojo.query.SeckillActivityQuery;
import com.zenithmind.mall.pojo.vo.SeckillActivityVO;

import java.util.List;

/**
 * 秒杀活动服务接口 - 遵循接口隔离原则，专门负责秒杀活动管理
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface SeckillActivityService {

    /**
     * 分页查询秒杀活动
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<SeckillActivityVO> getActivityPage(SeckillActivityQuery query);

    /**
     * 根据ID获取秒杀活动详情
     * 
     * @param id 活动ID
     * @return 活动详情
     */
    SeckillActivityVO getActivityById(String id);

    /**
     * 创建秒杀活动
     * 
     * @param activityDTO 活动信息
     * @return 活动ID
     */
    String createActivity(SeckillActivityDTO activityDTO);

    /**
     * 更新秒杀活动
     * 
     * @param id 活动ID
     * @param activityDTO 活动信息
     * @return 是否成功
     */
    Boolean updateActivity(String id, SeckillActivityDTO activityDTO);

    /**
     * 删除秒杀活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean deleteActivity(String id);

    /**
     * 启动秒杀活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean startActivity(String id);

    /**
     * 结束秒杀活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean endActivity(String id);

    /**
     * 取消秒杀活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean cancelActivity(String id);

    /**
     * 启用/禁用秒杀活动
     * 
     * @param id 活动ID
     * @param enabled 是否启用
     * @return 是否成功
     */
    Boolean updateActivityStatus(String id, Boolean enabled);

    /**
     * 获取当前进行中的活动
     * 
     * @return 进行中的活动列表
     */
    List<SeckillActivityVO> getCurrentActivities();

    /**
     * 获取即将开始的活动
     * 
     * @param limit 限制数量
     * @return 即将开始的活动列表
     */
    List<SeckillActivityVO> getUpcomingActivities(Integer limit);

    /**
     * 获取今日活动
     * 
     * @return 今日活动列表
     */
    List<SeckillActivityVO> getTodayActivities();

    /**
     * 检查活动是否可以参与
     * 
     * @param id 活动ID
     * @return 是否可以参与
     */
    Boolean canParticipate(String id);

    /**
     * 预热活动（提前加载到缓存）
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean warmUpActivity(String id);

    /**
     * 批量处理活动状态
     * 
     * @return 处理数量
     */
    Integer batchUpdateActivityStatus();
}
